package br.com.duosoftware.orcamento.entidades;

import java.io.Serializable;
import java.util.Date;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.OneToOne;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

/**
 *
 * @author Renato
 *
 */
@Entity
@Table(name = "previsoes_de_receita")
public class PrevisaoDeReceita implements Serializable, BaseEntity {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer id;
    //
    @OneToOne
    private UnidadeGestora unidadeGestora;
    //
    @OneToOne
    private UnidadeOrcamentaria unidadeOrcamentaria;
    //
    @OneToOne
    private PlanoDeReceita classificacao;
    //
    private Integer fichaReceita;
    //
    @Column(length = 80)//erro
    private String descricaoReceita;
    //
    @OneToOne
    private Confirmacao dedutoraEducacao;
    //
    @OneToOne
    private Confirmacao dedutoraSaude;
    //
    @OneToOne
    private PlanoDeReceita contaDedutora;
    //
    @OneToOne
    private TipoOrcamento tipoOrcamento;
    //
    @Temporal(TemporalType.DATE)
    @Column(name = "data_inclusao")
    private Date dataInclusao;
    //
    private double valorPrevisaoReceita;
    //
    private double valorFiscal;
    //
    private double valorSeguridade;
    //
    private double valorInvestimento;
    //
    @OneToOne
    private PlanoDeConta incorporacaoPatrimonial;
    //
    @OneToOne
    private PlanoDeConta vpa;
    //
    @OneToOne
    private Confirmacao calculoCamara;
    //
    @OneToOne
    private Confirmacao calculoPASEP;
    //
    @OneToOne
    private Confirmacao calculoEducacao;
    //
    @OneToOne
    private Confirmacao calculoSaude;
    //
    @OneToOne
    private Confirmacao calculoFUNDEB;
    //
    @OneToOne
    private Confirmacao calculoINSS;
    //
    @OneToOne
    private Confirmacao calculoIRRF;
    //
    @OneToOne
    private Confirmacao calculoISS;
    //
    @OneToOne
    private Confirmacao pagamento;
    //
    @OneToOne
    private Confirmacao receitaPrimaria;
    
    @Override
    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public UnidadeGestora getUnidadeGestora() {
        return unidadeGestora;
    }

    public void setUnidadeGestora(UnidadeGestora unidadeGestora) {
        this.unidadeGestora = unidadeGestora;
    }

    public UnidadeOrcamentaria getUnidadeOrcamentaria() {
        return unidadeOrcamentaria;
    }

    public void setUnidadeOrcamentaria(UnidadeOrcamentaria unidadeOrcamentaria) {
        this.unidadeOrcamentaria = unidadeOrcamentaria;
    }

    public PlanoDeReceita getClassificacao() {
        return classificacao;
    }

    public void setClassificacao(PlanoDeReceita classificacao) {
        this.classificacao = classificacao;
    }

    public Integer getFichaReceita() {
        return fichaReceita;
    }

    public void setFichaReceita(Integer fichaReceita) {
        this.fichaReceita = fichaReceita;
    }

    public String getDescricaoReceita() {
        return descricaoReceita;
    }

    public void setDescricaoReceita(String descricaoReceita) {
        this.descricaoReceita = descricaoReceita;
    }

    public Confirmacao getDedutoraEducacao() {
        return dedutoraEducacao;
    }

    public void setDedutoraEducacao(Confirmacao dedutoraEducacao) {
        this.dedutoraEducacao = dedutoraEducacao;
    }

    public Confirmacao getDedutoraSaude() {
        return dedutoraSaude;
    }

    public void setDedutoraSaude(Confirmacao dedutoraSaude) {
        this.dedutoraSaude = dedutoraSaude;
    }

    public PlanoDeReceita getContaDedutora() {
        return contaDedutora;
    }

    public void setContaDedutora(PlanoDeReceita contaDedutora) {
        this.contaDedutora = contaDedutora;
    }

    public TipoOrcamento getTipoOrcamento() {
        return tipoOrcamento;
    }

    public void setTipoOrcamento(TipoOrcamento tipoOrcamento) {
        this.tipoOrcamento = tipoOrcamento;
    }

    public Date getDataInclusao() {
        return dataInclusao;
    }

    public void setDataInclusao(Date dataInclusao) {
        this.dataInclusao = dataInclusao;
    }

    public double getValorPrevisaoReceita() {
        valorPrevisaoReceita =  valorFiscal + valorSeguridade + valorInvestimento;
        return valorPrevisaoReceita;
    }

    public void setValorPrevisaoReceita(double valorPrevisaoReceita) {
        this.valorPrevisaoReceita = valorPrevisaoReceita;
    }

    public double getValorFiscal() {
        return valorFiscal;
    }

    public void setValorFiscal(double valorFiscal) {
        this.valorFiscal = valorFiscal;
    }

    public double getValorSeguridade() {
        return valorSeguridade;
    }

    public void setValorSeguridade(double valorSeguridade) {
        this.valorSeguridade = valorSeguridade;
    }

    public double getValorInvestimento() {
        return valorInvestimento;
    }

    public void setValorInvestimento(double valorInvestimento) {
        this.valorInvestimento = valorInvestimento;
    }

    public PlanoDeConta getIncorporacaoPatrimonial() {
        return incorporacaoPatrimonial;
    }

    public void setIncorporacaoPatrimonial(PlanoDeConta incorporacaoPatrimonial) {
        this.incorporacaoPatrimonial = incorporacaoPatrimonial;
    }

    public PlanoDeConta getVpa() {
        return vpa;
    }

    public void setVpa(PlanoDeConta vpa) {
        this.vpa = vpa;
    }

    public Confirmacao getCalculoCamara() {
        return calculoCamara;
    }

    public void setCalculoCamara(Confirmacao calculoCamara) {
        this.calculoCamara = calculoCamara;
    }

    public Confirmacao getCalculoPASEP() {
        return calculoPASEP;
    }

    public void setCalculoPASEP(Confirmacao calculoPASEP) {
        this.calculoPASEP = calculoPASEP;
    }

    public Confirmacao getCalculoEducacao() {
        return calculoEducacao;
    }

    public void setCalculoEducacao(Confirmacao calculoEducacao) {
        this.calculoEducacao = calculoEducacao;
    }

    public Confirmacao getCalculoSaude() {
        return calculoSaude;
    }

    public void setCalculoSaude(Confirmacao calculoSaude) {
        this.calculoSaude = calculoSaude;
    }

    public Confirmacao getCalculoFUNDEB() {
        return calculoFUNDEB;
    }

    public void setCalculoFUNDEB(Confirmacao calculoFUNDEB) {
        this.calculoFUNDEB = calculoFUNDEB;
    }

    public Confirmacao getCalculoINSS() {
        return calculoINSS;
    }

    public void setCalculoINSS(Confirmacao calculoINSS) {
        this.calculoINSS = calculoINSS;
    }

    public Confirmacao getCalculoIRRF() {
        return calculoIRRF;
    }

    public void setCalculoIRRF(Confirmacao calculoIRRF) {
        this.calculoIRRF = calculoIRRF;
    }

    public Confirmacao getCalculoISS() {
        return calculoISS;
    }

    public void setCalculoISS(Confirmacao calculoISS) {
        this.calculoISS = calculoISS;
    }

    public Confirmacao getPagamento() {
        return pagamento;
    }

    public void setPagamento(Confirmacao pagamento) {
        this.pagamento = pagamento;
    }

    public Confirmacao getReceitaPrimaria() {
        return receitaPrimaria;
    }

    public void setReceitaPrimaria(Confirmacao receitaPrimaria) {
        this.receitaPrimaria = receitaPrimaria;
    }

    @Override
    public int hashCode() {
        int hash = 5;
        hash = 43 * hash + (this.id != null ? this.id.hashCode() : 0);
        return hash;
    }

    @Override
    public boolean equals(Object obj) {
        if (obj == null) {
            return false;
        }
        if (getClass() != obj.getClass()) {
            return false;
        }
        final PrevisaoDeReceita other = (PrevisaoDeReceita) obj;
        if (this.id != other.id && (this.id == null || !this.id.equals(other.id))) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return descricaoReceita;
    }
    
}